public class Main {
    public static void main(String[] args) {
//        System.out.println("Hello world!");


        //认识异常
        //1.一场该奶奶与体系结构
        //2.异常的处理方式
        //3.异常的处理流程
        //4.自定义异常类

        //1.异常的概念与体系结构
        //
        //在程序中也是一样，程序员是一帮办事严谨，追求完美的高科技人才，在日常开发中，绞尽脑汁将代码写的尽善尽美
        //在程序运行过程中，难免会出现一些奇奇怪怪的问题，有时通过代码很难去控制，比如，数据格式不对，网络不好
        //内存报警
        //
        //1.算术异常
        //你去除零


        //2.数组越界异常

        //3.空指针异常

        //从上述过程中可以看到，java中不同类型的异常，都有与其对应的类来进行描述
        //
        //1.异常的体系结构
        //

        //异常种类繁多，为了对不同的异常或者错误进行很好的分类管理，java内部维护了一个异常的体系结构

        //从上图可以看到：
        //1.throwable：是异常的顶层类，其派生出两个重要的子类，error和exception
        //2.error：指的是java虚拟机无法解决的严重问题，比如：jvm内部发生错误、资源耗尽等等。
        //典型代表：StackOverflowErroe和OutOfMemoryError，一旦发生，无力回天
        //3.Exception：异常产生后程序员可以通过代码进行处理，使得程序继续执行，比如：感冒发烧，，我们平时说的异常就是说的这个
        //另一个我们是无能为力的
        //
        //1.异常的分类
        //编译时异常--受检查异常
        //

        //运行时异常
        //在程序运行器件发生的异常，称为运行时异常，也称为非受查时候异常
        //

        //运行时异常是，程序已经经过编译了，得到了class文件，然后由jvm运行过程中出现的错误
        //
        //异常的处理
        //1.防御式编程
        //错误在代码中是客观存在的，因此我们要让程序出现问题的时候可以及时同志程序员，主要的方式
        //1.LBYL：look before you leap ，在操作之前就做了充分的检查，即：事前防御型

        //使用这种方式会让正确流程和错误的逻辑处理流程代码混在一起，代码整体显的比较乱

        //2.EAFP：事后认错型，事后获取原谅比事前或许许可更加的容易，也就是先操作，遇到问题再处理，也就是事后认错
        //
        //优势：正常流程和错误流程是分开的，程序员更加关心正确流程，代码更清晰，容易理解带伞吗
        //异常处理的核心思想就是时候认错
        //在java中，异常处理主要的五个关键字：throw、try、catch、final、throws

        //异常的抛出
        //在编写程序时候，如果程序出现错误，此时就要将错误的信息告知给调用者，比如：参数检测
        //在java 中可以使用throw关键字，抛出一个指定的异常对象，将错误信息告诉调用者
        //
    }
}